package com.fafu.common.web.converter;

import com.fafu.common.web.bean.PageBean;

import java.util.ArrayList;
import java.util.List;

/**
 * 类型转换器基类，采用命令设计模式实现
 *
 * @author hc
 */
public abstract class BaseConverter<E, V> {

    /**
     * 将实体类转换成VO，具体实现时可以借助GenerateO2O插件实现
     *
     * @param e
     * @return
     */
    protected abstract V entity2VO(E e);

    /**
     * 将List形式的实体类转换成List形式的VO
     *
     * @param entityList
     * @return
     */
    private List<V> entityList2VOList(List<E> entityList) {
        if (entityList == null) {
            return null;
        }
        final ArrayList<V> voList = new ArrayList<>(entityList.size());
        for (E e : entityList) {
            voList.add(entity2VO(e));
        }

        return voList;
    }

    /**
     * 将PageBean形式的实体类转换成PageBean形式的VO
     *
     * @param ePageBean
     * @return
     */
    public PageBean<V> entityPageBean2VOPageBean(PageBean<E> ePageBean) {
        if (ePageBean == null) {
            return null;
        }

        PageBean<V> vPageBean = new PageBean<>();

        vPageBean.setPageSize(ePageBean.getPageSize());
        vPageBean.setCurrent(ePageBean.getCurrent());
        vPageBean.setTotal(ePageBean.getTotal());
        vPageBean.setPages(ePageBean.getPages());
        vPageBean.setResult(entityList2VOList(ePageBean.getResult()));
        vPageBean.setUrl(ePageBean.getUrl());

        return vPageBean;
    }
}
